#ifndef CMD_HEADER
#define CMD_HEADER

#include<string>
#include<fstream>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<map>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<tclap/CmdLine.h>
#include "def.hpp"
#include "singleton.hpp"

using namespace TCLAP; // using the command line parser                                          
using namespace std;

namespace Puza{
  /* This class is a Singleton */
  class CMD{
  public:
    void parseCMD(int argc, char* argv[]);
    CMD();
  private:
    ModelType checkModel(string temp_model);
    GeneratorType checkGenerator(string temp_generator);
    EstimatorType checkEstimator(string temp_estimator);
    PolyaEstimatorType checkPolyaEstimator(string temp_polya_estimator);
    TopicModelType checkTopicModelType(string temp_topicmodel_type);
    TopicModelTaskType checkTopicModelTaskType(string temp_task);
  };
  typedef Singleton<CMD> PuzaCMD;
};

#endif
